﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Follow.Model;
using Follow.DataAccess;
using Follow.Common;

namespace Follow.Business
{
    public class FuncionarioBO
    {
        public IList<Funcionario> findAll()
        {
            FuncionarioDAO dao = new FuncionarioDAO();
            return dao.findAll();
        }

        public Funcionario findByIdUsuario(Int32 id)
        {
            FuncionarioDAO dao = new FuncionarioDAO();
            return dao.findByIdUsuario(id);
        }

        public IList<Funcionario> findByName(String nome)
        {
            FuncionarioDAO dao = new FuncionarioDAO();
            return dao.findByName(nome);
        }

        public IList<Funcionario> findByName(String nome, Boolean ativo)
        {
            FuncionarioDAO dao = new FuncionarioDAO();
            return dao.findByName(nome, ativo);
        }

        public void save(Funcionario f, Int32 idUsuario)
        {
            FuncionarioDAO dao = new FuncionarioDAO();

            if (f.IDUsuario == Int32.MinValue || f.IDUsuario.Equals(0))
            {
                throw new Exception("usuário inválido");
            }

            if (f.IDFuncionario == Int32.MinValue || f.IDFuncionario.Equals(0))
            {
                dao.insert(f, idUsuario);
            }
            else
            {
                dao.update(f, idUsuario);
            }
        }

        public Funcionario load(Int32 id)
        {
            FuncionarioDAO dao = new FuncionarioDAO();
            return dao.findById(id);
        }

        public void delete(Int32 id, Int32 idUsuario)
        {
            FuncionarioDAO dao = new FuncionarioDAO();
            validaDeleteFuncionario(id);
            dao.delete(id, idUsuario);
        }

        public void validaDeleteFuncionario(Int32 id)

        {
            VisitaDAO dao = new VisitaDAO();
            IList<Visita> f = dao.findByFunc(id);

            if (f != null && !(f.Count.Equals(0)))
            {
                throw new Exception("Esse Funcionário não pode ser excluído. Ele está relacionado a uma visita.");
            }

        }
     
        public IList<Funcionario> findByGestores()
        {
            FuncionarioDAO dao = new FuncionarioDAO();
            return dao.findByGestores();
        }
        public IList<Funcionario> findByNaoGestores()
        {
            FuncionarioDAO dao = new FuncionarioDAO();
            return dao.findByNaoGestores();
        }
    }
}